/* Utility mixins
   ========================================================================== */

/**
 * Clearfix for clearing floats like a boss h5bp.com/q
 */

@mixin clearfix {
  *zoom: 1;
  &:before,
  &:after {
    display: table;
    content: "";
    line-height: 0;
  }
  &:after {
    clear: both;
  }
}

/**
 * Media query
 */

@mixin media-query($device) {
    @media only screen and (min-width: $device) {
        @content;
    }
}

/**
 * Webkit-style focus
 */

@mixin tab-focus() {
  /* Default */
  outline: thin dotted #333;
  /* Webkit */
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}

/**
 * Center-align a block level element
 */

@mixin center-block() {
  display: block;
  margin-left: auto;
  margin-right: auto;
}


/**
 * Hide text overflow and end with ...
 */

@mixin text-overflow() {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}


/* Gradient mixins
   ========================================================================== */

@mixin horizontal($startColor : $white, $endColor : $lightergrey) {
  background-color: $endColor;
  background-image  : -webkit-gradient(linear, 0 0, 100% 0, from($startColor), to($endColor)); // Safari 4+, Chrome 2+
  background-image  : -webkit-linear-gradient(left, $startColor, $endColor);           // Safari 5.1+, Chrome 10+
  background-image  : -moz-linear-gradient(left, $startColor, $endColor);            // FF 3.6+
  background-image  : -ms-linear-gradient(left, $startColor, $endColor);             // IE10
  background-image  : -o-linear-gradient(left, $startColor, $endColor);              // Opera 11.10
  background-image  : linear-gradient(left, $startColor, $endColor);               // W3C
  background-repeat : repeat-x;
 }

@mixin vertical($startColor : $white, $endColor:  $lightergrey) {
  background-image  : -webkit-gradient(linear, 0 0, 0 100%, from($startColor), to($endColor)); // Safari 4+, Chrome 2+
  background-image  : -webkit-linear-gradient(top, $startColor, $endColor);            // Safari 5.1+, Chrome 10+
  background-color  : $endColor;
  background-image  : -moz-linear-gradient(top, $startColor, $endColor);             // FF 3.6+
  background-image  : -ms-linear-gradient(top, $startColor, $endColor);              // IE10
  background-image  : -o-linear-gradient(top, $startColor, $endColor);             // Opera 11.10
  background-image  : linear-gradient(top, $startColor, $endColor);                // W3C
  background-repeat : repeat-x;
}

@mixin directional($startColor : $white, $endColor : $lightergrey, $deg : 45deg) {
  background-color  : $endColor;
  background-image  : -moz-linear-gradient($deg, $startColor, $endColor);           // FF 3.6+
  background-image  : -ms-linear-gradient($deg, $startColor, $endColor);            // IE10
  background-image  : -webkit-linear-gradient($deg, $startColor, $endColor);          // Safari 5.1+, Chrome 10+
  background-image  : -o-linear-gradient($deg, $startColor, $endColor);             // Opera 11.10
  background-image  : linear-gradient($deg, $startColor, $endColor);              // W3C
  background-repeat : repeat-x;
}

// .bordered(COLOR, COLOR, COLOR, COLOR);
@mixin bordered($top-color: #eee, $right-color: #eee, $bottom-color: #eee, $left-color: #eee) {
  border-top : solid 1px $top-color;
  border-left : solid 1px $left-color;
  border-right : solid 1px $right-color;
  border-bottom : solid 1px $bottom-color;
}

/* Rounded corners
   ========================================================================== */

/**
 * Round all corners
 * example: @include rounded(4px);
 */

@mixin rounded($radius:4px) {
  border-radius : $radius;
}

/**
 * Round individual corners (top right, bottom right, bottom left, top left)
 * example: @include border-radius(4px, 0, 0, 4px);
 */

@mixin border-radius($topright: 0, $bottomright: 0, $bottomleft: 0, $topleft: 0) {
  border-top-right-radius: $topright;
  border-bottom-right-radius: $bottomright;
  border-bottom-left-radius: $bottomleft;
  border-top-left-radius: $topleft;
  -webkit-background-clip: padding-box;
  -moz-background-clip: padding;
  background-clip: padding-box;
}

/**
 * Box shadow
 * example: @include box-shadow(HORIZONTAL VERTICAL BLUR COLOR));
 */

@mixin box-shadow($shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26)) {
  -webkit-box-shadow: $shadow;
  -moz-box-shadow: $shadow;
  box-shadow: $shadow;
}

/**
 * Drop shadow
 * example: @include drop-shadow(HORIZONTAL, VERTICAL, BLUR, ALPHA);
 */

@mixin drop-shadow($x-axis: 0, $y-axis: 1px, $blur: 2px, $alpha: 0.1) {
  -webkit-box-shadow: $x-axis $y-axis $blur rgba(0, 0, 0, $alpha);
  -moz-box-shadow: $x-axis $y-axis $blur rgba(0, 0, 0, $alpha);
  box-shadow: $x-axis $y-axis $blur rgba(0, 0, 0, $alpha);
}

/**
 * Text shadow
 * example: @include text-shadow(0 2px 3px rgba(0,0,0,.25));
 */

@mixin text-shadow($shadow: 0 2px 3px rgba(0,0,0,.25)) {
text-shadow: $shadow; }

/**
 * Opacity
 * example: @include opacity(0.5); // 50% opacity
 */

@mixin opacity($opacity: 0.5) {
  opacity: $opacity;
}

/* Transformations
   ========================================================================== */

/**
 * @include rotate(VALUEdeg);
 */

@mixin rotate($deg) {
  -webkit-transform: rotate($deg);
  -moz-transform: rotate($deg);
  -ms-transform: rotate($deg);
  -o-transform: rotate($deg);
  transform: rotate($deg);
}

/**
 * @include scale(VALUE);
 */

@mixin scale($ratio) {
  -webkit-transform: scale($ratio);
  -moz-transform: scale($ratio);
  -ms-transform: scale($ratio);
  -o-transform: scale($ratio);
  transform: scale($ratio);
}

/**
 * @include skew(VALUE, VALUE);
 */

@mixin skew($x: 0, $y: 0) {
  -webkit-transform: skew($x, $y);
  -moz-transform: skew($x, $y);
  -ms-transform: skew($x, $y);
  -o-transform: skew($x, $y);
  transform: skew($x, $y);
}

/**
 * @include transition(PROPERTY DURATION DELAY(OPTIONAL) TIMING-FINCTION);
 */

@mixin transition($transition) {
  -webkit-transition: $transition;
  -moz-transition: $transition;
  -ms-transition: $transition;
  -o-transition: $transition;
  transition: $transition;
}

/**
 * @include translate(VALUE, VALUE);
 */

@mixin translate($x: 0, $y: 0) {
  -webkit-transform: translate($x, $y);
  -moz-transform: translate($x, $y);
  -ms-transform: translate($x, $y);
  -o-transform: translate($x, $y);
  transform: translate($x, $y);
}

@mixin translate3d($x: 0, $y: 0, $z: 0) {
  -webkit-transform: translate($x, $y, $z);
  -moz-transform: translate($x, $y, $z);
  -ms-transform: translate($x, $y, $z);
  -o-transform: translate($x, $y, $z);
  transform: translate($x, $y, $z);
}

@mixin animation($name, $duration: 300ms, $delay: 0, $ease: ease) {
  -webkit-animation: $name $duration $delay $ease;
  -moz-animation:    $name $duration $delay $ease;
  -ms-animation:     $name $duration $delay $ease;
}


/**
 * Box-sizing
 * example: @include box-sizing(VALUE); //(border-box, padding-box, content-box)
 */

@mixin box-sizing($boxsize: border-box) {
  -webkit-box-sizing: $boxsize;
  -moz-box-sizing: $boxsize;
  -ms-box-sizing: $boxsize;
  box-sizing: $boxsize;
}


/**
 * Hide from visual and speaking browsers
 */

@mixin hidden {
  display: none;
  visibility: hidden;
}

/**
 * Hide but maintain layout
 */

@mixin invisible() {
  visibility: hidden;
}
